A typical data access environment has a multi-tier architecture. For description purposes, it can be separated into three distinct tiers:
Web server
Applications
Data
The tiers are based on business function, and are typically separated by firewalls. Client software, such as a browser or a report-authoring tool, sits above the tiers.
The web server contains a firewall and one or more gateways. All web communication is performed through a gateway. A gateway is responsible for passing on requests to the application server, in tier 2, for execution.
The applications tier contains one or more application servers. The application server runs requests, such as reports and queries that are forwarded by a gateway running on the web server. Typically, one of the components of the applications tier is a query engine, which is data access middle ware that provides universal data access to a variety of heterogeneous database systems. The query engine formulates queries (typically SQL) and passes them on to the data tier, through a native database API (such as ODBC) for execution.
The data tier contains database management systems (DBMS), which manage raw data stored in a database. Examples of such systems include Oracle, DB2, and Microsoft SQL Server.
Although a multi-tier architecture can be configured in several different ways, a typical configuration places each tier on a separate computer (server). A database server is typically a “high end” server, and thus can process queries at a relatively fast speed. An application server cannot generally process queries as quickly as a database server.
In order to solve many business questions, a query engine may be required to process queries involving many-to-one-to-many relationships. These types of relationships can be thought of as two one-to-many or master-detail relationships. In other words, the query involves combining a master table with two detail tables. In the past, this problem was dealt with by issuing two separate queries, one for each master-detail table combination and then the stitching the results together. Unfortunately, this requires local processing time on the application server. There is a need to prevent or reduce the amount of local (application server) processing required to process this type of query. Hence, a technique for producing a meaningful result using a single SQL: 1999 (Structured Query Language) statement that can be processed by the DBMS on the database server is desired.